package com.fbms.module.system.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fbms.common.exception.ServiceException;
import com.fbms.common.utils.UserHolder;
import com.fbms.module.auth.Bean.LoginUserDTO;
import com.fbms.module.common.ICheckFieldService;
import com.fbms.module.system.bean.entity.SysUser;
import com.fbms.module.system.dao.SysUserMapper;
import com.fbms.module.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Date;


/**
 * 类描述：系统用户实现类
 *
 * @ClassName SysUserServiceImpl
 * @Author HappyBoy
 * @Date 2023-03-15 15:21
 **/
@Service
@RequiredArgsConstructor
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {

    /**
     * 用户Mapper
     */
    private final SysUserMapper userMapper;

    /**
     * 校验字段服务类
     */
    private final ICheckFieldService checkFieldService;

    /**
     * 删除用户
     * @param userId 用户Id
     * @return 条数
     */
    @Override
    public int deleteUserById(String userId) {
        // 删除角色关联关系
        // 删除用户
        return userMapper.deleteById(userId);
    }

    /**
     * 更新用户
     * @param userId 用户Id
     * @param sysUser 用户信息
     * @return 条数
     */
    @Override
    public int updateUser(String userId, SysUser sysUser) {
        // 查询用户
        SysUser user = userMapper.selectById(userId);

        // 用户不存在
        if(user == null){
            throw new ServiceException("用户不存在");
        }

        return  userMapper.updateById(sysUser);
    }

    /**
     * 查询用户列表
     * @param user 条件
     * @param page 分页信息
     * @return 用户信息列表
     */
    @Override
    public IPage<SysUser> getList(SysUser user, IPage<SysUser> page) {
        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>(user);
        return userMapper.selectPage(page, queryWrapper);
    }

    /**
     * 保存用户信息
     * @param user 用户信息
     * @return 是否
     */
    @Override
    public Integer saveUser(SysUser user) {
        // 填写创建时间
        user.setCreateAt(new Date());
        user.setCreateBy("");
        LoginUserDTO loginUser = UserHolder.getUser();
        if(loginUser != null){
            user.setCreateBy(loginUser.getId());
        }
        return userMapper.insert(user);
    }

    /**
     * 检查用户名是否唯一
     * @param userName 用户名
     * @return 0-是 1-否
     */
    @Override
    public String checkUserNameUnique(String userName) {
        return checkFieldService.checkFieldUnique(userMapper, SysUser::getName, userName);
//        return checkFieldUnique(SysUser::getName, userName);
    }

    /**
     * 检查电话是否唯一
     * @param cellphone 电话
     * @return 0-是 1-否
     */
    @Override
    public String checkCellphoneUnique(String cellphone) {
        return checkFieldService.checkFieldUnique(userMapper,SysUser::getCellphone, cellphone);
//        return checkFieldUnique(SysUser::getCellphone, cellphone);
    }


    /**
     * 检查字段是否唯一
     * @param func 方法
     * @param fieldValue 字段值
     * @return 0-是 1-否
     */
//    private String checkFieldUnique(SFunction<SysUser, ?> func, String fieldValue){
//        LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<SysUser>();
//        wrapper.eq(func, fieldValue);
//        Long integer = userMapper.selectCount(wrapper);
//        if(integer > 0){
//            return Constants.NOT_UNIQUE;
//        }
//        return Constants.UNIQUE;
//    }


}
